package com.kerrykidz.membership.dao.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.kerrykidz.filemanagement.dao.model.HisTicketEntity;
import com.kerrykidz.filemanagement.dao.model.SingleTicketUserEntity;
import com.kerrykidz.filemanagement.dao.model.VipUserEntity;
import com.kerrykidz.membership.dao.model.CusMemHisEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdEntity;
import com.rdp.framework.core.dao.mapper.MyBatisSuperMapper;
import com.rdp.framework.core.model.MyBatisSuperModel;
import com.rdp.framework.exception.RDPException;

@Repository
public interface CusMemHisEntityMapper extends MyBatisSuperMapper<CusMemHisEntity> {
	
	/**
	 * 获取单次票用户信息
	 * @return
	 */
	public List<SingleTicketUserEntity> listSingelTicket(@Param("condition") String condition,
			@Param("status") String status,
			@Param("startDate") String startDate,
			@Param("endDate") String endDate);
	
	/**
	 * 获取会员信息
	 * @return
	 */
	public List<VipUserEntity> listVipUser(MyBatisSuperModel model);
	
	/**
	 * 获取购票历史列表
	 * @return
	 */
	public List<HisTicketEntity> getBuyTicketHisList(@Param("memberIdList") List<String> memberIdList);
	
	/**
	 * 根据会员编号获取历史信息
	 * @param fkMemId:会员Id
	 * @param hisType:历史类型hisType
	 * @return
	 */
	public CusMemHisEntity findEntityByMembId(@Param("fkMemId") String fkMemId, @Param("hisType") String hisType);
	
	/**
	 * 根据会员编号获取历史信息
	 * @param fkMemId:会员Id
	 * @param hisType:历史类型hisType
	 * @return
	 */
	public List<CusMemHisEntity> findEntityByMembIds(@Param("fkMemId") String fkMemId, @Param("hisType") String hisType);
	
	/**
	 * 根据会员编号获取历史信息
	 * @param fkMemId:会员Id
	 * @return
	 */
	public String findOrderByMembId(@Param("fkMemId") String fkMemId);

	/**
	 * 获取正在使用中的会员卡历史信息
	 * @param fkMemId
	 * @return
	 * @date: 2014年9月29日
	 */
	public CusMemHisEntity findMemberHisByMembId(@Param("fkMemId") String fkMemId);
	
	
	/**
	 * 根据会员编号修改历史信息
	 * @param memberId:会员Id
	 * @param guaId:监护人Id
	 * @return
	 */
	public void updateEntityByMembId(CusMemHisEntity entity) throws RDPException;
	
	/**
	 * 根据监护人电话号码/电子邮件查询所属会员信息
	 * 
	 * @param telnum
	 *            监护人电话号码
	 * @return
	 * @throws RDPException
	 */
	public List<VipUserEntity> findMemberByTelOrEmail(MyBatisSuperModel model);
	
	/**
	 * 根据会员ID查询会员所购会籍商品
	 * 
	 * @param pkMemId
	 * @return
	 * @throws RDPException
	 */
	public GblScmPrdEntity getPrdByMemberId(@Param("pkMemId") String pkMemId);

	
	/**
	 * 验证该会员带了几个非会员购单次票
	 * @param memberId
	 * @throws RDPException
	 * @date: 2014年9月11日
	 */
	public Integer checkBdyCount(@Param("memberId") String memberId) throws RDPException;
	
	/**
	 * 验证指定会员是否还有未使用的单次票
	 * @param memberId
	 * @throws RDPException
	 * @date: 2014年11月13日
	 */
	public Integer findEnableSingleByMemberId(@Param("memberId") String memberId) throws RDPException;
	
	/**
	 * 会员失效
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void updateInvalidMemberByQuartz() throws RDPException;
	
	/**
	 * 添加会员、非会员过期余额清0历史
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void insertExpireStoredByQuartz() throws RDPException;
	
	/**
	 * 退会后更新历史
	 * @param entity
	 * @throws RDPException
	 * @date: 2014年9月30日
	 */
	public void updateEntityByRetreat(CusMemHisEntity entity) throws RDPException;
	
	/**
	 * 查询订单明细的成人票数量
	 * @param pkOrderId:订单Id
	 * @return
	 */
	public Integer getTicketCount(@Param("pkOrderId") String pkOrderId);
	
	/**
	 * 查询订单明细的成人票数量
	 * @param pkOrderId:订单Id
	 * @return
	 */
	public Integer getTicketCountContainone(@Param("pkOrderId") String pkOrderId);
	
	/**
	 * 是否退单记录数
	 * @param memberId
	 * @throws RDPException
	 * @date: 2014年11月27日
	 */
	public Integer getBackOrderCount(@Param("memberId") String memberId) throws RDPException;
}